package com.minxi.jsp.controller;

import com.minxi.jsp.javabean.UserInfo;
import com.minxi.jsp.service.Impl.UserServletImpl;
import com.minxi.jsp.service.UserService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

@WebServlet(name = "AddServlet", urlPatterns = "/add")
public class AddServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf_8");

        String userName = req.getParameter("userName");
        String userPwd = req.getParameter("userPwd");
        String userPhone = req.getParameter("userPhone");
        String userSex = req.getParameter("userSex");
        Connection c = null;
        PreparedStatement p = null;
        try {
            String url = "jdbc:mysql:///student?serverTimezone=Asia/Shanghai";
            String name = "root";
            String pwd = "123456";
            c = DriverManager.getConnection(url, name, pwd);
            String sql = "insert into user_info(user_name, user_pwd, user_phone, user_sec) values(?,?,?,?);";
            p = c.prepareStatement(sql);
            p.setString(1, userName);
            p.setString(2, userPwd);
            p.setString(3, userPhone);
            p.setString(4, userSex);
            int i = p.executeUpdate();
            if (i > 0) {
                resp.sendRedirect("jsp/home.jsp");
            }else {
                resp.sendRedirect("jsp/add.jsp");
            }
        }catch (Exception e){
            e.printStackTrace();
        }try{
            p.close();
            c.close();
        }catch (Exception e){
            e.printStackTrace();
        }

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取表单提交的数据
        String userName = req.getParameter("userName");
        String userPwd = req.getParameter("userPwd");
        String userPhone = req.getParameter("userPhone");
        String userSex = req.getParameter("userSex");

        //2.将表单提交的信息用UserInfo对象封装起来，UserInfo对象里面的每一个属性就是对应表单里面的输入的每一个值
        UserInfo userInfo = new UserInfo();
        userInfo.setUser_name(userName);
        userInfo.setUser_pwd(userPwd);
        userInfo.setUser_phone(userPhone);
        userInfo.setUser_gender(userSex);

        //3.创建UserServiceImpl服务对象，来处理新增请求
        UserService userService = new UserServletImpl();
        //4.处理新增请求后会返回对应的处理结果
        Boolean add = userService.add(userInfo);
        //5.得到service返回的接口后，告诉浏览器新增成功，并做出相应动作，比如跳转页面 （包含重定向和转发）
        if(add){
            resp.sendRedirect("jsp/home.jsp");//重定向
        }else {
//            resp.sendRedirect("jsp/add.jsp");//重定向
            req.getRequestDispatcher("jsp/add.jsp").forward(req,resp);//转发
        }
        /**
         * 重定向（Redirect）和转发（Forward）是Web开发中常见的两种页面跳转机制，它们在功能上有一定的相似性，但在实现方式和使用场景上有所不同：
         * <p>
         * 1. **重定向（Redirect）**：
         *    - 重定向是一种HTTP协议的机制，通常用于告诉浏览器客户端需要请求一个新的URL。
         *    - 它通过HTTP状态码来实现，常见的重定向状态码有301（永久重定向）和302（临时重定向）。
         *    - 浏览器接收到重定向响应后，会使用新的URL重新发起请求。
         *    - 重定向是客户端可见的，用户可以看到URL的变化。
         *    - 重定向可以跨域，即从一个域跳转到另一个不同的域。
         * <p>
         * 2. **转发（Forward）**：
         *    - 转发是一种服务器端的跳转机制，通常用于服务器内部页面的跳转。
         *    - 它不涉及HTTP协议层面的跳转，而是服务器内部将请求从一个页面转发到另一个页面。
         *    - 转发是客户端不可见的，用户不会看到URL的变化。
         *    - 转发通常不能跨域，只能在同一个服务器或应用内部进行。
         * <p>
         * 在实际使用中，选择重定向还是转发取决于具体的需求和场景。例如，如果你需要改变URL或者进行跨域跳转，可能会选择使用重定向。而如果你希望在服务器内部进行页面跳转，同时不希望用户看到URL的变化，那么转发可能是更好的选择。
         */
    }
}
